import pandas as pd
from sklearn.decomposition import PCA

# 读取 output.csv 文件
input_file_path = 'output.csv'  # 替换为你的 output.csv 文件路径
df = pd.read_csv(input_file_path)

# 定义需要归一化的列
# columns_to_normalize = ['NDVI', 'WET', 'NDBSI', 'LST', 'PMDI', 'DI', 'CSI']
columns_to_normalize = ['NDVI', 'WET', 'NDBSI', 'LST', 'PMDI', 'CSI']

# 对每一列进行归一化
for column in columns_to_normalize:
    # 使用 Min-Max 归一化公式：(x - min) / (max - min)
    df[column] = (df[column] - df[column].min()) / (df[column].max() - df[column].min())

# 进行主成分分析 (PCA)
pca = PCA(n_components=1)  # 提取一个主成分作为 RSEI
rsei_0 = pca.fit_transform(df[columns_to_normalize])

# 将 RSEI 添加到原数据框中
df['RSEI'] = 1 - rsei_0

# 对 RSEI 进行归一化
df['RSEI'] = (df['RSEI'] - df['RSEI'].min()) / (df['RSEI'].max() - df['RSEI'].min())

# 定义要保存的列（包括经纬度和计算后的指标）
columns_to_save = ['longitude', 'latitude', 'NDVI', 'WET', 'NDBSI', 'LST', 'PMDI', 'CSI', 'RSEI']

# 保存包含 RSEI 的数据到新的文件
output_file_path = 'rsei_output.csv'  # 输出文件路径
df[columns_to_save].to_csv(output_file_path, index=False)

print(f"已将包含 RSEI 的数据保存到文件: {output_file_path}")

# 输出 RSEI 和各个指标的影响关系
loadings = pca.components_[0]  # 主成分载荷
loading_df = pd.DataFrame(loadings, index=columns_to_normalize, columns=['Loading'])

# 考虑取反操作对载荷的影响
loading_df['Loading'] = -loading_df['Loading']  # 取反载荷值

# 判断关系（正相关或负相关）
loading_df['Relationship'] = loading_df['Loading'].apply(lambda x: 'Positive' if x > 0 else 'Negative')

# 计算贡献大小（绝对值）
loading_df['Magnitude'] = loading_df['Loading'].abs()

print("RSEI 和各个指标的影响关系：")
print(loading_df)